package object01;

/**
 * @author shkstart
 * @date 2022/4/21 - 15:10
 */
/* 知识点回顾
    索引都是用int类型，返回的索引是负数则是没有找到。(索引即数组下标)
    void 的意思是无返回值


       * 类中方法的声明和使用
 *
 * 方法：描述类应该具有的功能。
 * 比如：Math类：sqrt()\random() \...
 *     Scanner类：nextXxx() ...
 *     Arrays类：sort() \ binarySearch() \ toString() \ equals() \ ...
 *
 *      * 1.举例：
 *         public void eat(){}
 *         public void sleep(int hour){}
 *         public String getName(){}
 *         public String getNation(String nation){}
 *
 *         2.方法的声明：
 *         权限修饰符 返回值类型 方法名(形参列表) {
 *                方法体；
 *         }
 *
 *          * 3. 说明：
 * 		3.1 关于权限修饰符：默认方法的权限修饰符先都使用public
 * 			Java规定的4种权限修饰符：private、public、缺省、protected  -->封装性再细说
 *
 * 		3.2 返回值类型： 有返回值  vs 没有返回值
 * 			3.2.1  如果方法有返回值，则必须在方法声明时，指定返回值的类型。同时，方法中，需要使用
 *                return关键字来返回指定类型的变量或常量：“return 数据”。
 * 				  如果方法没有返回值，则方法声明时，使用void来表示。通常，没有返回值的方法中，就不需要
 *               使用return.但是，如果使用的话，只能“return;”表示结束此方法的意思。
 *
 * 			3.2.2 我们定义方法该不该有返回值？
 * 				① 题目要求
 * 			 	② 凭经验：具体问题具体分析
 *
 *
 *  *      3.3 方法名：属于标识符，遵循标识符的规则和规范，“见名知意”
 *
 *      3.4 形参列表： 方法可以声明0个，1个，或多个形参。
 *         3.4.1 格式：数据类型1 形参1,数据类型2 形参2,...
 *
 *         3.4.2 我们定义方法时，该不该定义形参？
 *         		① 题目要求
 *         		② 凭经验：具体问题具体分析
 *       3.5 方法体：方法功能的体现。
 *
 *        *  4.return关键字的使用：
 *  	1.使用范围：使用在方法体中
 *  	2.作用：① 结束方法
 *            ② 针对于有返回值类型的方法，使用"return 数据"方法返回所要的数据。
 *      3.注意点：return关键字后面不可以声明执行语句。
         *  5. 方法的使用中，可以调用当前类的属性或方法
 *  		特殊的：方法A中又调用了方法A:递归方法。
 *  	             	（方法中的确可以调用自己方法本身但要注意是否合理，否则可能陷入死循环）
 *          方法中，不可以定义方法。
* */
public class Exercise01 {
    public static void main(String[] args) {
        Customer cust1 = new Customer();

        cust1.eat();
        cust1.sleep(8,18);
        cust1.getNation("中国");
//        以数组解释下需不需要形参设置
//        int arr[] = new int[]{12,3,4,5,0};
//        cust1.sort(arr);
//        System.out.println(arr[1]);
//        说明一下形参设置问题：比如就炒菜而言，方法体就是成品，形参就是所需的料理
//        如sort是把无序的数字排成有序的结构。但在调用方法时需用到如sort的方法时
//        不能把成品直接写到方法体中，这样意味这你把它定义死了，如买一道菜来充当时你未做出的菜一般
//        *********************************************



    }
}


class Customer{
//    属性
    String name;
    int age;
    boolean b1;

//    方法：
    public void eat() {
        System.out.println("客户吃饭");
        return;

//        return之后不可以声明表达式 有点像break
//        System.out.println("hello");
    }

    public void sleep(int hour,int age) {
        System.out.println("客户睡了" + hour + "个小时");
        System.out.println(+age);


    }

    public String getName() {
//        在方法内可以调用属性
        if (age > 18) {
            return name; //返回变量
        } else {
            return "Tom";//返回常量
        }

    }

    public String getNation(String nation) {
        String info = "我的国籍是" + nation;
        return info;
    }

    public void sort(int arr[]) {

    }

    public void info(){
        //错误的
//		public void swim(){
//
//		}

    }
}
